package com.proyecto.personas.modelo.validacion.proyecto;

import com.proyecto.core.modelo.excepciones.GeneralException;
import com.proyecto.core.modelo.servicio.interfaces.IServicioTransaccion;
import com.proyecto.core.modelo.validacion.IValidacionServicio;
import com.proyecto.personas.modelo.dto.CodigoPostalId;
import com.proyecto.personas.modelo.dto.ConfigDetailDirId;
import com.proyecto.personas.modelo.dto.Direcciones;
import com.proyecto.personas.modelo.dto.DireccionesId;
import com.proyecto.personas.modelo.dto.LocalidadId;
import com.proyecto.personas.modelo.dto.TipoDireccion;
import com.proyecto.personas.modelo.dto.TipoDireccionId;
import com.proyecto.personas.modelo.dto.TiposEdificacionId;
import com.proyecto.personas.modelo.dto.TiposZonasId;

public class ValidacionServicioDirecciones implements IValidacionServicio {
	IServicioTransaccion servicioLocalidad;
	IServicioTransaccion servicioCodigoPostal;
	IServicioTransaccion servicioTipoDirec;
	IServicioTransaccion servicioConfigDetailDir;
	IServicioTransaccion servicioTiposZonas;
	IServicioTransaccion servicioTiposEdificacion;
	
	public void buscarCatalogoPorPropiedad(String atributo, String valor)
			throws GeneralException {
		if (atributo == null || valor == null || atributo.equals("")
				|| valor.equals("")) {
			throw new GeneralException(
					"error.persona.datosBasicos.direcciones.buscarCatalogoXPropiedad.parametrosInvalidos");
		}

	}
	
	public void consultar(Object o) throws GeneralException {
		DireccionesId objdir = (DireccionesId) o;
		if (o == null || objdir.getCiaopr() == null
				|| objdir.getCiaopr().trim().equals("")
				|| objdir.getDireccioncod() == null
				|| objdir.getDireccioncod().trim().equals("")) {
			throw new GeneralException(
					"error.persona.datosBasicos.direcciones.consulta.pkNull");
		}
	}

	public void consultarTodos(Object o) throws GeneralException {
		if (o == null) {
			throw new GeneralException(
					"error.persona.datosBasicos.direcciones.consulta.pkNull");
		}
	}

	public void eliminar(Object o) throws GeneralException {
		Direcciones objDir = (Direcciones) o;
		if (objDir == null || objDir.getId().getCiaopr() == null
				|| objDir.getId().getCiaopr().trim().equals("")
				|| objDir.getId().getDireccioncod() == null
				|| objDir.getId().getDireccioncod().trim().equals("")) {
			throw new GeneralException(
					"error.persona.datosBasicos.direcciones.eliminar.pkNull");
		}
	}

	public void incluir(Object o) throws GeneralException {
		Direcciones objDir = (Direcciones) o;
		if (objDir == null || objDir.getId().getCiaopr() == null
				|| objDir.getId().getCiaopr().trim().equals("")
				) {
			throw new GeneralException(
					"error.persona.datosBasicos.direcciones.incluir.pkNull");
		}
		this.validaCampos(objDir);
	}

	public void modificar(Object o) throws GeneralException {
		Direcciones objDir = (Direcciones) o;
		if (objDir == null || objDir.getId().getCiaopr() == null
				|| objDir.getId().getCiaopr().trim().equals("")
				|| objDir.getId().getDireccioncod() == null
				|| objDir.getId().getDireccioncod().trim().equals("")) {
			throw new GeneralException(
					"error.persona.datosBasicos.direcciones.modificar.pkNull");
		}
		this.validaCampos(objDir);
	}
	
	private void validaCampos(Direcciones objDir) throws GeneralException{
		String campos = "";
		// TODO: 
		//campos obligatorios
		if (objDir.getDirtipocod()== null
				|| "".equals(objDir.getDirtipocod().trim())){
					campos = campos + "Direccion.TipoDireccion;";
		}

		if (objDir.getLocalidadtexto()== null
				|| "".equals(objDir.getLocalidadtexto().trim())){
					campos = campos + "Direccion.localidadtexto;";
		}
		
		if (objDir.getZonaresidencialcod()== null
				|| "".equals(objDir.getZonaresidencialcod().trim())){
					campos = campos + "Direccion.zonaresidencialcod";
		}
		
		if (!"".equals(campos)){
			throw new GeneralException("error.persona.datosBasicos.direcciones.campos_obligatorios",campos);
		}
		
		if (objDir.getDirtipocod() != null && !"".equals(objDir.getDirtipocod())) {
				servicioTipoDirec.consultar(new TipoDireccionId(objDir.getId().getCiaopr(),objDir.getDirtipocod()));
			}
		if (objDir.getLocalidadcod() != null && !"".equals(objDir.getLocalidadcod())) {
				servicioLocalidad.consultar(new LocalidadId(objDir.getId().getCiaopr(), objDir.getLocalidadcod()));
		}
		if (objDir.getCodpostalcod() != null && !"".equals(objDir.getCodpostalcod())) {
				servicioCodigoPostal.consultar(new CodigoPostalId(objDir.getId().getCiaopr(), objDir.getCodpostalcod()));
		}

		if (objDir.getConfdetdircod() != null && !"".equals(objDir.getConfdetdircod())) {
				servicioConfigDetailDir.consultar(new ConfigDetailDirId(objDir.getId().getCiaopr(), objDir.getConfdetdircod()));
		}

		if (objDir.getTipzonacod() != null && !"".equals(objDir.getTipzonacod())) {
				servicioTiposZonas.consultar(new TiposZonasId(objDir.getId().getCiaopr(), objDir.getTipzonacod()));
			}

		if (objDir.getTipedifcod() != null && !"".equals(objDir.getTipedifcod())) {
				servicioTiposEdificacion.consultar(new TiposEdificacionId(objDir.getId().getCiaopr(), objDir.getTipedifcod()));
		}
				
	}
	
	public IServicioTransaccion getServicioLocalidad() {
		return servicioLocalidad;
	}

	public void setServicioLocalidad(IServicioTransaccion servicioLocalidad) {
		this.servicioLocalidad = servicioLocalidad;
	}

	public IServicioTransaccion getServicioCodigoPostal() {
		return servicioCodigoPostal;
	}

	public void setServicioCodigoPostal(IServicioTransaccion servicioCodigoPostal) {
		this.servicioCodigoPostal = servicioCodigoPostal;
	}

	public IServicioTransaccion getServicioTipoDirec() {
		return servicioTipoDirec;
	}

	public void setServicioTipoDirec(IServicioTransaccion servicioTipoDirec) {
		this.servicioTipoDirec = servicioTipoDirec;
	}

	public IServicioTransaccion getServicioConfigDetailDir() {
		return servicioConfigDetailDir;
	}

	public void setServicioConfigDetailDir(
			IServicioTransaccion servicioConfigDetailDir) {
		this.servicioConfigDetailDir = servicioConfigDetailDir;
	}

	public IServicioTransaccion getServicioTiposEdificacion() {
		return servicioTiposEdificacion;
	}

	public void setServicioTiposEdificacion(
			IServicioTransaccion servicioTiposEdificacion) {
		this.servicioTiposEdificacion = servicioTiposEdificacion;
	}

	public IServicioTransaccion getServicioTiposZonas() {
		return servicioTiposZonas;
	}

	public void setServicioTiposZonas(IServicioTransaccion servicioTiposZonas) {
		this.servicioTiposZonas = servicioTiposZonas;
	}

	
}
